头文件的使用

  一个程序里所用的头文件数目会受到许多因素的影响。这些因素中大部分都与你所用的系统里处理文件的方式有关,与C++的关系则小一些。例如,如果你的编辑器没有同时查看许多文件的功能,使用多个头文件就会变得不那么有吸引力。与此类似,打开和读入20个各有50行的头文件也比读入一个1000行的头文件更耗费时间。你在对小项目采用多头文件风格之前还是应该考虑一下。

  还要给一个警告:十几个头文件再加上程序的执行环境所用的标准头文件(它们常常有上百个)一般还是可以管理的。但是,如果你把一个大程序的声明划分为逻辑上具有最小规模的头文件(将每个结构声明放入它自己独立的头文件,如此等等),对于一个不太大的项目,你很容易就会陷进无法管理的成百个文件的泥沼。我认为那样做就太过分了。

  对于大型项目,采用多头文件方式是不可避免的。对于这样的项目,数百个文件(不计标准头文件)是很正常的事情。真正的混乱开始于文件数达到数千时。显然,对于真实规模的程序,单一头文件的风格根本不可能使用。这种程序必然有多个头文件。在两种组织风格之间的选择将会(反复地)出现在组成程序的各个部分之中。

  单一头文件风格和多头文件风格并不是相互排斥的替代物。它们是具有互补性的两种技术,在设计重要的模块时必须认真考虑选取,在系统演化中也必须重新考虑。最关键的是应该记住,一个界面不可能对于做什么都最好。通常很值得将实现方的界面和用户的界面区分开。此外,许多大系统的结构中都为大部分用户提供了一个简单界面,而为专家用户提供了另一个扩展的界面,这是很好的主意。专家用户的界面(“完整界面”)倾向于用#include包含比普通用户希望知道的更多的特征。事实上,要弄清普通用户的界面常可以这样做:如果某些特征需要包含一些头文件,其中定义了普通用户不必知道的功能,那么就把它们都删除掉。术语“普通用户”并没有一点贬义。在那些我不比是专家的领域里,我就特别愿意做一个普通用户,这样我就可以不必去争辩什么了。

🔚